import { isType } from './m.common';
import { IndexType } from './type';
import { recursive } from 'merge';

/**
 *
 * 是否是一个空对象
 * @param { Object } value 需要判断的数据
 * @returns { boolean } 是否为空对象
 * **/
export const isEmptyJSON = (value: object): boolean => {
    if (!isType(value, 'object'))
        throw new Error('invalid isEmptyJSON parameter');
    return !Object.keys(value as ObjectConstructor).length;
};

/**
 * 扁平化一个JSON对象
 * @param { Object } obj 需要扁平化的对象
 * @returns { Object } 返回扁平化之后的JSON对象
 * **/
export const flatJSON = (
    obj: IndexType<string | IndexType<string>>
): IndexType<string> => {
    let value: IndexType<string> = {};
    for (const key in obj) {
        const item = obj[key];
        if (isType(item, 'object')) {
            value = recursive(true, value, flatJSON(item as typeof obj));
        } else {
            value[key as string] = item as string;
        }
    }
    return value;
};

/**
 * 将一个JSON对象按照指定的分隔符，拼接为特定的字符串
 * @param { Object } content 内容
 * @param { string } sep 分隔符字符串, 默认为空字符串
 * @return { string } 处理完成之后的字符串
 * **/
export const splitJsonToContent = (
    content: IndexType<string>,
    sep: string = ''
) => {
    content = flatJSON(content);
    let fileContent = '';
    for (const key in content) {
        fileContent += `${key}${sep}${content[key]}\n`;
    }
    return fileContent;
};
